package Reflect;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * @Author: ylc
 * @Description:通过配置文件获取类对象
 * @Date Created in 2022-04-19 16:06
 */
public class ReflectTest {
    public static void main(String[] args) throws Exception{
        /*
            需求：写一个"框架"，不能改变该类的任何代码的前提下，可以帮我们创建任意类的对象，并且执行其中任意方法

         */
        //1.加载配置文件
        //1.1创建properties对象
        Properties pro = new Properties();
        //1.2加载配置文件，转换为一个集合
        //获取类加载器
        ClassLoader classLoader = ReflectTest.class.getClassLoader();
        //通过类加载器获取当前目录下的配置文件
        InputStream inputStream = classLoader.getResourceAsStream("properties");
        pro.load(inputStream);

        //2.获取配置文件中的参数
        String className = pro.getProperty("className");
        String methodName = pro.getProperty("methodName");

        //3.将类加载进内存
        Class cls = Class.forName(className);
        //4.创建对象
        Object obj = cls.newInstance();
        //5.获取方法
        Method method = cls.getMethod(methodName);
        //6.执行方法
        method.invoke(obj);

    }
}
